# { "data": {"name":"Vector", "version":"v1"} }
type Vector (NormalFloat, NormalFloat);

# { "data": {"name":"Point", "version":"v1"} }
type Point {
    name: String,
    pos:  Vector
};

# { "data": {"name":"Shape", "version":"v1"} }
type Shape enum {
    # { "data": {"name":"Line", "version":"v1"} }
    type Line (Point, Point);
    # { "data": {"name":"Polygon", "version":"v1"} }
    type Polygon {
        points: List[Point]
    };
    # { "data": {"name":"Circle", "version":"v1"} }
    type Circle {
        center: Point,
        radius: NormalFloat
    };
};

# { "data": {"name":"Canvas", "version":"v1"} }
type Canvas {
    shapes: List[Shape]
};
